# 关于金钱的工具


def safe_to_number(input_str):
    """
    安全地将输入字符串转换为数字，确保结果是浮点数格式
    
    Args:
        input_str: 输入的字符串参数
        
    Returns:
        float: 转换后的浮点数，如果无法转换则返回None
        
    Examples:
        >>> safe_to_number("1.24")
        1.24
        >>> safe_to_number("10")
        10.0
        >>> safe_to_number("abc")
        None
    """
    try:
        # 尝试转换为整数
        int_value = int(input_str)
        # 如果是整数，转换为浮点数并保留两位小数
        return float(int_value)
    except ValueError:
        try:
            # 尝试转换为浮点数
            float_value = float(input_str)
            return float_value
        except ValueError:
            # 如果都无法转换，返回None
            return None


# 保证金工具
def calculate_security_deposit(price, receiving_margin):
    """
    计算订单的保证金金额，默认抽价格的3倍,如果抽成小于接单保证金的总价格，那么先判断接单的保证金是否大于我发布价格的5倍，如果是就全部返回0
    如果不是，就返回我发布价格的5倍
    
    Args:
        price: 订单价格，字符串或浮点数
        receiving_margin: 接单保证金，字符串或浮点数
        
    Returns:
        float: 返回价格的3倍，如果小于接单保证金，那么先判断接单的保证金是否大于我发布价格的5倍，如果是就全部返回0
        如果不是，就返回我发布价格的5倍
        
    Examples:
        >>> calculate_security_deposit("100")
        30.0
        >>> calculate_security_deposit(100, 0.25)
        25.0
    """
    if receiving_margin > 20:
        return 0
    return 20
    # 确保价格是浮点数
    price = safe_to_number(price)
    receiving_margin = safe_to_number(receiving_margin)
    if price is None:
        return None
    money = price * 2
    if money < receiving_margin:
        if receiving_margin > price * 5:
            return 0
        else:
            return price * 5
    else:
        return money


